package com.smh.a02streamDemo1;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;

public class StreamDemo6 {
    public static void main(String[] args) {
        //如果要收集到map集合中,那么键不能重复,不然会报错.


        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            list.add(i);
        }
        //收集
        List<Integer> collect = list.stream().filter(s -> s > 4)
                .filter(s -> s < 16)
                .collect(Collectors.toList());

        System.out.println(collect);

        //可以去重
        Set<Integer> collect2 = list.stream().filter(s -> s > 4)
                .filter(s -> s < 16)
                .collect(Collectors.toSet());

        System.out.println(collect2);


        //toMap :参数一表示键的生成规则
        // 参数二表示值的生成规则
        //参数一:
        //Function泛型一:表示流中每一个数据的类型
        // 泛型二:表示Map集合中键的数据类型
        //方法app1y形参:依次表示流里面的每一个数据
        //方法体:生成键的代码
        //返回值:已经生成的键
        // 参数二:
        //Function泛型一:表示流中每一个数据的类型
        // 泛型二:表示Map集合中值的数据类型
        //方法apply形参:依次表示流里面的每一个数据
        //方法体:生成值的代码
        //返回值:已经生成的值


        Map collect3 = list.stream().filter(s -> s > 4)
                .filter(s -> s < 16)
                .collect(Collectors.toMap(new Function<Integer,Integer>() {
                    @Override
                    public Integer apply(Integer i) {
                        return i;
                    }
                }, new Function<Integer, String>() {
                    @Override
                    public String apply(Integer i) {
                        return i.toString();
                    }
                }));

        System.out.println(collect3);

        Map collect4 = list.stream().filter(s -> s > 4)
                .filter(s -> s < 16)
                .collect(Collectors.toMap(integer -> integer,integer -> integer.toString()));

        System.out.println(collect4);

    }
}
